package com.yidu.logisticssystem.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yidu.logisticssystem.entity.LogisticsWage;
import com.yidu.logisticssystem.entity.vo.DateVo;
import com.yidu.logisticssystem.service.LogisticsWageService;
import com.yidu.logisticssystem.utils.BaseMessage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 工资表(LogisticsWage)表控制层
 *
 * @author 李彩凤
 * @since 2021-03-08 16:46:58
 */
@Api(tags = "工资明细")
@RestController
@RequestMapping("logisticsWage")
public class LogisticsWageController {
    /**
     * 服务对象logisticsWageService
     */
    @Resource
    private LogisticsWageService logisticsWageService;
    static StringBuffer months = new StringBuffer();//删除月份
    Logger log = LoggerFactory.getLogger(this.getClass());//日志输出

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 数据信息状态
     */
    @ApiOperation(value = "根据id查询工资明细", notes = "返回工资明细对象")
    @GetMapping("selectOne/{id}") //PathVariable 路径变量
    public BaseMessage selectOne(@PathVariable Integer id) {
        log.info("进来了selectOne");//日志输出
        LogisticsWage wage = logisticsWageService.queryById(id);//调用wageService的queryId方法查询单条数据返回对象wage
        BaseMessage message = new BaseMessage();//BaseMessage自定义信息状态
        if (wage != null) {//wage不为空
            message.setData(wage);//数据
            message.setState(1);//状态1
            message.setMessage("查询成功！");//信息
        } else {//wage为空
            message.setData(null);
            message.setState(0);
            message.setMessage("查询失败！");
        }
        return message;
    }

    /**
     * 增加或修改方法
     *
     * @param addWage 操作对象
     * @return 信息状态
     */

    @ApiOperation(value = "根据id判断是否增加或修改工资明细", notes = "返回工资明细json对象")
    @GetMapping("addOrUpdate")//RequestBody 请求对象
    public BaseMessage addOrUpdate(LogisticsWage addWage, DateVo dateVo) {
        log.info("进来了addOrUpdate");//日志输出
        BaseMessage message = new BaseMessage();//自定义信息状态
        LogisticsWage wage = null;//定义一个null的wage
        boolean flag = true;//立一个flag
        int row = -99;//定义一个行数变量为-99
        if (addWage.getWageId() == null) {//if id为空 使用增加方法
            if (dateVo.getYear() != null && dateVo.getMonth() != null) {//if 年月份不为空
                log.info(dateVo.getYear() + "年" + dateVo.getMonth() + "月");//日志输出
                addWage.setWageMonth(dateVo.getYear() + "-" + dateVo.getMonth());//处理格式 年-月 放入对象
            }
            String[] month = months.toString().split(",");
            for (String s : month) {//循环取月份
                if (s.equals(addWage.getWageMonth()) || s.equals(dateVo.getYear() + "-" + dateVo.getMonth())) {//如果两个月份相等
                    flag = false;//flag为false
                    break;
                }
            }
            if (flag) {//if flag为true
                row = logisticsWageService.insertSelective(addWage);//调用wageService的insertSelective方法增加对象返回行数
            }
            if (row > 0) {//if行数不为0
                message.setState(1);//状态1
                message.setMessage("正在获取本月员工数据...");//信息
            } else if (row == -99) {//否则行数为0（两个月份相等）
                message.setState(1);//状态1
                message.setMessage("本月数据已被永久删除！");//信息：本月数据已被永久删除
            } else {//否则
                message.setState(0);
                message.setMessage("本月薪资已结算！");
            }
        } else {//否则id不为空
            wage = logisticsWageService.update(addWage);// 使用update修改方法返回修改对象wage
            if (wage != null) {//if对象不为空
                message.setData(addWage);//数据
                message.setState(1);//状态1
                message.setMessage("修改成功！");//信息
            } else {
                message.setData(addWage);
                message.setState(0);
                message.setMessage("修改失败！");
            }
        }
        return message;
    }

    @ApiOperation(value = "根据id批量删除工资明细", notes = "返回工资明细json对象")
    @DeleteMapping("deleteObj/{wageMonth}")
    public BaseMessage deleteObj(@PathVariable String wageMonth) {
        log.info("进来了deleteObj");//日志输出
        months.append(wageMonth).append(",");//months标记已经被永久删除的数据
        /*使用三目运算符当deleteAll方法返回的行数>0为真，return自定义BaseMessage成功；否则返回失败*/
        return logisticsWageService.deleteAll(wageMonth) > 0 ? BaseMessage.succes() : BaseMessage.fail();
    }

    @ApiOperation(value = "模糊查询分页", notes = "返回工资明细json对象集合")
    //@RequestMapping(method = RequestMethod.GET,value = "findAll")
    @GetMapping("findAll")
    public Map<String, Object> findAll(LogisticsWage wage, int page, int limit) {
        log.info("进来了findAll " + " " + wage.getFindAllWage() + wage.getWageMonth());//日志输出
        /*使用PageHelper的startPage方法设置分页信息，参数一代表从 第几页 开始查询，参数二代表每页查询的 行数*/
        PageHelper.startPage(page, limit);
        String[] month = wage.getWageMonth().split(",");//处理月份 使用split根据逗号分割字符串返回数组
        List<LogisticsWage> list = logisticsWageService.findAll(wage.getFindAllWage(), month[month.length - 1]);//根据条件、月份模糊查询 注意取数组长度-1的的月份放入参数二
        PageInfo<LogisticsWage> pageInfo = new PageInfo<LogisticsWage>(list);//处理分页：new一个PageInfo将查询出的集合放入，返回LogisticsWage类型的PageInfo
        Map<String, Object> map = new HashMap<>();//new一个String, Object类型的map接收数据，返回到页面
        map.put("code", 0);//code 0
        map.put("msg", "正在查询...");//msg 信息
        map.put("data", pageInfo.getList()); //data getList()
        map.put("count", pageInfo.getTotal());//count getTotal()
        return map;
    }
}
